<?php 
/**
 * Formatea
 *
 * @version 0.1
 * @author Martin Radosta
 */
class FormatoComponent extends Object {

	var $controller;

    function startup(&$controller) { 
		$this->controller = $controller;
	}

/** 
 * Formatea un numero con 2 decimales por defecto
 * @param  string  $numero  Numero a formatear
 * @param  string  $decimales Cantidad de decimales que se desea. Por defecto 2
 * @return string  Numero formateado
*/
    function formatearNumero($numero, $decimales=2)
    {
        if(empty($numero))
        {
            $numero = 0;
        }
        return number_format($numero, $decimales, ",", ".");     
	}

	function formatearHora($valor)
    {
		if (strpos($valor," "))
	    {
            $hora=explode(":",substr($valor,strpos($valor," ")+1));
            if (count($hora) !=3)
            {
                return $valor;
            }
			elseif ($hora[0] === "00" && $hora[1] === "00" && $hora[2] === "00")
				return "";
			else
				return $hora[0] . ":" . $hora[1] . ":" . $hora[2];
        }
		else
			return $valor;
    }

/** 
 * @return boolean
 * @param  string  $valor	
*/  
	function formatearFecha($valor)
    {
	    if (strpos($valor,"/"))
	    {
		    $fecha=explode("/",$valor);
		    // Formatear fecha de Frances a MySql  dd/mm/yyyy   ->   yyyy-mm-dd
		    if (count($fecha)!=3)
			    return $valor;

		    $dia=$fecha[0];
		    $mes=$fecha[1];
		    $anio=$fecha[2];
		    if (strlen($dia)==1)
			    $dia="0".$dia;
		    if (strlen($mes)==1)
			    $mes="0".$mes;
		    if (strlen($anio)==2)
		    {
			    if($anio<50) 
			    {
				    $anio=str_pad($anio,4,"20",STR_PAD_LEFT);
			    }
			    else
			    {
				    $anio=str_pad($anio,4,"19",STR_PAD_LEFT);
			    }
		    }
		    if ($dia=="00" || $mes=="00" || $anio=="00") return "";
		    return $anio . "-" . $mes . "-" . $dia;
	    }
	    else if (strpos($valor,"-"))
	    {
            $fecha=explode("-",substr($valor,0,10));
            // Formatear fecha de MySql a Frances  yyyy-mm-dd ->   dd/mm/yyyy
            if (count($fecha)!=3)
            {
                return $valor;
            }

            $mes=$fecha[1];
            $dia=$fecha[2];
            $anio=$fecha[0];		

            if (strlen($dia)==1)
            {
                $dia="0".$dia;
            }
            if (strlen($mes)==1)
            {
                $mes="0".$mes;
            }
            if (strlen($anio)==2 && $anio>0)
            {
                $anio="20".$anio;
            }
            if (strlen($anio)==2 && $anio<0)
            {
                $anio="19".$anio;
            }
            if ($dia=="00" || $mes=="00" || $anio=="00") 
            {
                return "";
            }
            return $dia . "/" . $mes . "/" . $anio;
        }
    }


/*
en caso de usar el helper formulario->inputFechaHora devuelve una fecha hora lista para insertar en un campo datetime de mysql
*/
	function formatearFechaHora($value=false)
    {
		if($value) {
			if(strstr($value, " ")) {
				$tmp = explode(" ", $value);
				return $this->formatearFecha($tmp[0]) . " " . $this->formatearHora($tmp[1]);
			}
			else
				return $this->formatearFecha($value);
		}
		elseif(is_array($this->controller->data) && !empty($this->controller->data)) {
			foreach($this->controller->data as $k=>$v)
			{
				if(is_array($v))
				{
					foreach($this->controller->{$this->controller->modelClass}->_tableInfo->value as $valor)
					{
						$tipos[$valor['name']] = $valor['type'];
					}

					foreach($v as $k1=>$v1)
					{
						if(isset($tipos[$k1])) {
							if($tipos[$k1] == "date" && !empty($this->controller->data[$k][$k1])) {
								$this->controller->data[$k][$k1] = $this->formatearFecha($this->controller->data[$k][$k1]);
							}
							elseif($tipos[$k1] == "datetime" && !empty($this->controller->data[$k][$k1])) {
								$this->controller->data[$k][$k1] = $this->formatearFechaHora($this->controller->data[$k][$k1]);
							}
						}
					}
				}
			}
		}
	}
}
?>